#ifndef _LLIST_H
#define _LLIST_H

typedef struct LLIST LLIST;
struct LLIST {
    LLIST *prev;
    LLIST *next;

    void *data;
};

LLIST * ll_new_el           (void *data);
LLIST * ll_append_el        (LLIST **, void *data);
bool    ll_is_loop          (LLIST *);
LLIST * ll_get_first_el     (LLIST *);
LLIST * ll_get_nth_el       (LLIST *, u32 num);
LLIST * ll_get_last_el      (LLIST *);
u32     ll_get_num_el       (LLIST *);
void    ll_for_each_data    (LLIST *, datahandler);
LLIST * ll_search_data      (LLIST *, void *data);
void    ll_sort             (LLIST *, datacmp);
void    ll_free_el          (LLIST *);
void    ll_free_all         (LLIST *);
void    ll_free_all_handler (LLIST *, datahandler);

#endif

